﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using System.Data.SqlClient;
using Entidades;

namespace Acceso_a_Datos
{
    public class UsuarioDatos
    {
        private ConexionBD conexion;

        public UsuarioDatos()
        {
            conexion = new ConexionBD();
        }

        public List<UsuarioEntidades> ObtenerTodos()
        {
            ConexionBD conexion = new ConexionBD();
            DataTable tablaDatos = conexion.SelectQuerySP("ObtenerUsuarios", null);

            if (tablaDatos.Rows.Count > 0)
            {
                List<UsuarioEntidades> usuarios = new List<UsuarioEntidades>();
                foreach (DataRow fila in tablaDatos.Rows)
                {
                    UsuarioEntidades usuarioEnt = new UsuarioEntidades();
                    usuarioEnt.IdUsuario = fila.Field<int>("IdUsuario");
                    usuarioEnt.NombreUsuario = fila.Field<string>("NombreUsuario");
                    usuarioEnt.Contraseña = fila.Field<string>("Contraseña");
                    usuarioEnt.TipoUsuario = fila.Field<int>("TipoUsuario");
                    usuarioEnt.Estado = fila.Field<bool>("Estado");

                    usuarios.Add(usuarioEnt);
                }
                
                return usuarios;
            }
            else
                return null;
        }

        public UsuarioEntidades ObtenerPorId(int idUsuario)
        {
            string consulta = "SELECT idUsuario, NombreUsuario, Contraseña, TipoUsuario, Estado FROM Usuarios " 
                + "WHERE idUsuario = @idUsuario";
            
            SqlParameter[] parametros = new SqlParameter[1];
            parametros[0] = new SqlParameter();
            parametros[0].SqlDbType = SqlDbType.Int;
            parametros[0].ParameterName = "@idUsuario";
            parametros[0].Value = idUsuario;
            
            DataTable tablaDatos = conexion.SelectQuery(consulta, parametros);

            if (tablaDatos.Rows.Count > 0)
            {
                UsuarioEntidades usuario = new UsuarioEntidades();
                usuario.IdUsuario = tablaDatos.Rows[0].Field<int>("IdUsuario");
                usuario.NombreUsuario = tablaDatos.Rows[0].Field<string>("NombreUsuario");
                usuario.Contraseña = tablaDatos.Rows[0].Field<string>("Contraseña");
                usuario.TipoUsuario = tablaDatos.Rows[0].Field<int>("TipoUsuario");
                usuario.Estado = tablaDatos.Rows[0].Field<bool>("Estado");

                return usuario;
            }
            else
                return null;
        }

        public UsuarioEntidades ObtenerPorNombre(string nombreUsuario)
        {
            string consulta = "SELECT IdUsuario, NombreUsuario, Contraseña, TipoUsuario, Estado FROM Usuarios " 
                + "WHERE NombreUsuario = @nombreUsuario";

            SqlParameter[] parametros = new SqlParameter[1];
            parametros[0] = new SqlParameter();
            parametros[0].SqlDbType = SqlDbType.VarChar;
            parametros[0].ParameterName = "nombreUsuario";
            parametros[0].Value = nombreUsuario;

            DataTable tablaDatos = conexion.SelectQuery(consulta, parametros);

            if (tablaDatos.Rows.Count > 0)
            {
                UsuarioEntidades usuario = new UsuarioEntidades();
                usuario.IdUsuario = tablaDatos.Rows[0].Field<int>("IdUsuario");
                usuario.NombreUsuario = tablaDatos.Rows[0].Field<string>("NombreUsuario");
                usuario.Contraseña = tablaDatos.Rows[0].Field<string>("Contraseña");
                usuario.TipoUsuario = tablaDatos.Rows[0].Field<int>("TipoUsuario");
                usuario.Estado = tablaDatos.Rows[0].Field<bool>("Estado");

                return usuario;
            }
            else
                return null;
        }

        public void Insertar(UsuarioEntidades usuario)
        {
            string consulta = "INSERT INTO Usuarios VALUES ("
                + "@nombreUsuario, @contraseña, @tipoUsuario, @estado)";

            SqlParameter[] parametros = new SqlParameter[4];
            parametros[0] = new SqlParameter("nombreUsuario", usuario.NombreUsuario);
            parametros[1] = new SqlParameter("contraseña", usuario.Contraseña);
            parametros[2] = new SqlParameter("tipoUsuario", usuario.TipoUsuario);
            parametros[3] = new SqlParameter("estado", usuario.Estado);

            conexion.ExecuteNonQuery(consulta, parametros);
        }

        public void Actualizar(UsuarioEntidades usuario)
        {
            string consulta = "UPDATE Usuarios SET "
                + "NombreUsuario = @nombreUsuario, Contraseña = @contraseña, TipoUsuario = @tipoUsuario, Estado = @estado "
                + "WHERE IdUsuario = @idUsuario";

            SqlParameter[] parametros = new SqlParameter[5];            
            parametros[0] = new SqlParameter("nombreUsuario", usuario.NombreUsuario);
            parametros[1] = new SqlParameter("contraseña", usuario.Contraseña);
            parametros[2] = new SqlParameter("tipoUsuario", usuario.TipoUsuario);
            parametros[3] = new SqlParameter("estado", usuario.Estado);
            parametros[4] = new SqlParameter("idUsuario", usuario.IdUsuario);

            conexion.ExecuteNonQuery(consulta, parametros);
        }

        public void Eliminar(int idUsuario)
        {
            string consulta = "DELETE FROM Usuarios WHERE Idusuario = @idUsuario";

            SqlParameter[] parametros = new SqlParameter[1];
            parametros[0] = new SqlParameter("idUsuario", idUsuario);

            ConexionBD conexion = new ConexionBD();
            conexion.ExecuteNonQuery(consulta, parametros);
        }
    }
}